www.gusucode.com > VC++ 换肤窗口源码程序 > VC++ 换肤窗口源码程序\code\SkinWin\Utils.cpp
//Download by http://www.NewXing.com // 2002.11.23 // copy from kdphoto projects #include "stdafx.h" int GetChar( char ** str ) { int code = **((unsigned char **)str); if ( !str ) return 0; if ( !*str ) return 0; if ( !code ) return 0; (*str) ++; if ( code > 0x80 ) { code *= 256; code += **((unsigned char **)str); (*str) ++; } return code; }; int SetChar( char **str, int chr ) { int byte = 1; if ( !str ) return 0; if ( !*str ) return 0; if ( chr < 256 ) { **((unsigned char **)str) = chr % 256; (*str) ++; } else { **((unsigned char **)str) = chr / 256; (*str) ++; **((unsigned char **)str) = chr % 256; (*str) ++; byte ++; } return byte; } int PeekChar( char **str ) { int code = **((unsigned char **)str); if ( !str ) return 0; if ( !*str ) return 0; if ( !code ) return 0; if ( code > 0x80 ) { code *= 256; code += *((unsigned char *)(*str + 1)); } return code; } int CatChar( char *str, int cc) { int len = 0; while( *str ) { GetChar( &str ); len++; } SetChar( &str, cc ); *str = 0; return (++len); } char *whitespaces = " \t\n"; ///去掉空格的函数 void trim( char *buf, char *result ) { char * p; if ( !buf || !result ) return; p = strlen( buf ) + buf; while ( (*buf) && strchr( whitespaces, *buf) ) buf++; while( (p >= buf) && strchr( whitespaces, *p) ) p--; while ( buf <= p ) *result++ = *buf++; *result = 0; } char *next_token( char *buf, char *token, char *stopchars ) { if ( !stopchars ) stopchars = whitespaces; int cc; char *p = token; while ( (cc = GetChar(&buf)) && (!strchr( stopchars, cc)) ) SetChar( &token, cc); SetChar( &token, 0); trim( p, p ); return buf; } CString GetPathName( const char * filename ) { /* CString path = filename; char *file = path.GetBuffer(512); char *p = file + strlen( file ); for ( ; *p != '\\' && *p != '/' && p > file; p-- ); if ( *p == '\\' || *p == '/') p++; *p = 0; path.ReleaseBuffer(); */ char path[MAX_PATH]; strcpy( path, filename ); char *p = path + strlen( path ); for ( ; *p != '\\' && *p != '/' && p > path; p-- ); if ( *p == '\\' || *p == '/') p++; *p = 0; return CString(path); } ///获取文件扩展名 const char * GetExt( const char * filename ) { const char *p = strlen(filename) + filename; while( p > filename && *p != '.' ) p--; if ( *p != '.' ) return "\0"; else return p; } ///获取文件扩展名 CString GetFileName( const char * filename, int ext = 0) { /* CString path = filename; char *file = path.GetBuffer(512); char *p = file + strlen( file ); for ( ; *p != '\\' && *p != '/' && p > file; p-- ); if ( *p == '\\' || *p == '/') p++; if ( !ext ) { char *p1 = p; while( *p1 && *p1 != '.' ) p1++; *p1 = 0; } path.ReleaseBuffer(); return p; */ char path[MAX_PATH]; strcpy( path, filename ); char *p = path + strlen(path); for ( ; *p != '\\' && *p != '/' && p > path; p-- ); if ( *p == '\\' || *p == '/') p++; if ( !ext ) { char *p1 = p; while( *p1 && *p1 != '.' ) p1++; *p1 = 0; } return CString(p); } typedef HRESULT (_stdcall *RegFunc)(void); BOOL RegisterControl( const char * file, int reg ) { HMODULE hmod = LoadLibrary( file ); if ( !hmod ) return FALSE; RegFunc func; if ( reg ) func = (RegFunc)GetProcAddress( hmod, "DllRegisterServer" ); else func = (RegFunc)GetProcAddress( hmod, "DllUnregisterServer" ); if ( func ) { HRESULT hr = func(); FreeLibrary( hmod ); return S_OK == hr; } FreeLibrary( hmod ); return FALSE; } //0:win9x //1:winnt //2:win2000/winxp //3:win32s int GetWindowVersion() { DWORD ret; DWORD dwVersion = GetVersion(); // Get the Windows version. DWORD dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); DWORD dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion))); // Get the build number. DWORD dwBuild; if (dwVersion < 0x80000000) // Windows NT/2000/XP { dwBuild = (DWORD)(HIWORD(dwVersion)); if ( dwBuild == 5 ) ret = 2; else ret = 1; } else if (dwWindowsMajorVersion < 4) // Win32s { dwBuild = (DWORD)(HIWORD(dwVersion) & ~0x8000); ret = 3; } else // Windows 95/98/Me { dwBuild = 0; ret = 0; } return ret; } CString GetSystemPath() { CString systempath; ::GetWindowsDirectory(systempath.GetBuffer(MAX_PATH), MAX_PATH); systempath.ReleaseBuffer(); BOOL bWin9x = ( GetWindowVersion() == 0 ); if (systempath.Right(1) != _T("\\")) { //is win9x if ( bWin9x ) systempath += _T("\\System\\"); else systempath += _T("\\System32\\"); } return systempath; } int debug_printf(char *fmt, ...); //be careful! void RecursiveDelete(CString szPath) { CFileFind ff; CString path = szPath; if(path.Right(1) != "\\") path += "\\"; path += "*.*"; BOOL res = ff.FindFile(path); ///debug_printf("delete dir!:%s\n", (LPCSTR)szPath); while(res) { res = ff.FindNextFile(); if (!ff.IsDots() && !ff.IsDirectory()) { DeleteFile(ff.GetFilePath()); } else if (ff.IsDirectory() && !ff.IsDots() ) { path = ff.GetFilePath(); RecursiveDelete(path); RemoveDirectory(path); } } }